package main

import (
	"math/rand"
	"os"
	"runtime/pprof"
	"time"
)

// benchmark 基准测试可以断粮某个函数或者方法的性能, 也就是说,如果我们知道性能的瓶颈在哪里, benchmark 是一个很好的方式, 但是面对一个未知的程序,如何去分析这个程序的性能, 并找到瓶颈呢?
// pprof 就是用来解决这个问题的, pprof 包含两部分:
// 1. 编译到程序中的 runtime/pprof 包
// 2. 性能剖析工具 go tool pprof

func generate(n int) []int {
	rand.Seed(time.Now().UnixNano())
	nums := make([]int, 0)
	for i := 0; i < n; i++ {
		nums = append(nums, rand.Int())
	}
	return nums
}

func bubbleSort(nums []int)  {
	for i := 0;i<len(nums);i++ {
		for j := 1; j < len(nums) - 1; j++ {
			if nums[j] < nums[j - 1] {
				nums[j], nums[j -1] = nums[j - 1], nums[j]
			}
		}
	}
}

func main(){
	pprof.StartCPUProfile(os.Stdout)
	defer pprof.StopCPUProfile()
	n := 10
	for index := 0; index < 5; index++ {
		nums := generate(index)
		bubbleSort(nums)
		n *= 10
	}
}